package com.tanhua.server.controller;

import com.tanhua.autoconfig.templates.SmsTemplate;
import com.tanhua.server.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 用户的控制器
 */
@RestController
@RequestMapping("/user")
public class LoginController {


    @Autowired
    private SmsTemplate smsTemplate;

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    @Autowired
    private UserService userService;
    /**
     * 登录---发送验证码
     * 请求连接  POST   /login
     * 请求参数：
     * Body类型：请求参数传递的是json
     * phone
     * {
     * "phone":    "12123"
     * }
     *
     * @RequesBody domain:对象中的属性
     * Map：map集合中的key
     * 返回值：
     *     Spring内置的响应对象：ResponseEntity，可以知道状态码
     */
    @PostMapping("/login")
    public ResponseEntity login(@RequestBody Map map) {
        //int i = 1 / 0;
        //获取手机号码
        String phone = map.get("phone").toString();
        //获取验证码
        //String code = RandomUtil.randomNumbers(6);
        String code = "123456";
        //发送短信
        //smsTemplate.sendSms(phone, code);
        //将验证码存入Redis
        redisTemplate.opsForValue().set("CODE"+phone,code,5, TimeUnit.MINUTES);

        return ResponseEntity.ok(null);//参数：正常的返回数据，ok--200
    }

    /**
     * 判断验证码
     * POST  /user/loginVerification
     *    请求参数有Bady，phone，verificationCode
     *    返回值
     *           token，isNew
     *           键值对使用Map
     *   web层COntroller
     *     1.获取请求参数
     *     2.大量的业务逻辑（在业务层构建）
     *     3.构造响应数据
     */
    @PostMapping("/loginVerification")
    public ResponseEntity loginVerification(@RequestBody Map map) {
        //获取请求参数
        String phone = map.get("phone").toString();
        //用户输入的验证码
        String code = map.get("verificationCode").toString();
        //调用登录的方法（新用户则是注册保存用户信息）
        Map retMap = userService.loginVerification(phone, code);
        //构造返回
        return ResponseEntity.ok(retMap);
    }
}
